LLVM IRを読みたい
コード例
https://gyazo.com/4c215d35922cd092cc13dfd8ae61b5ce
code:ll
define i32 @main(i32 %argc, i8** %argv) {
...
}
%argc, %argvは型を持ったレジスタ
型 名前の感じなのねmrsekut.icon
@と%
@はglobalな変数のprefix
%はlocalな変数のprefix
ラベル
code:ll
entry_0:
jumpするときに使う
種類
int
boolはi1で表現
ex. i1,i32などiNで表現
float, double
pointer
Cと同じ様に*で表現
配列
[サイズx型]で表現
ex. [4 x i64]
ベクタ
<サイズx型>で表現
構造体
{型, 型, ...}
void
関数型
ラベル型
token型
Metadata型
GEP
GetElementPtr
わかりやすい
LLVM IRにgetelementptrという命令がある
code:ll
getelementptr <元の型>, <ベースのアドレス>, <配列や構造体などのインデックス>
最後の<配列や構造体などのインデックス>は複数個ある場合もある
元の型ってなにmrsekut.icon
変数のアドレスを計算する
code:ll
i8* getelementptr inbounds (4 x i8, 4 x i8* @putNumForm, i32 0, i32 0) 命令
alloca
store
アドレスへ値を書き込む
load
メモリアドレスの読み込み
参考